import Mock from 'mockjs'

/**
 * AuthRules 模拟数据
 */
class AuthRulesMock {

    // 显示资源列表
    index(option) {
        let param = this.parseOption(option);
        console.log('[权限规则模拟数据] 显示资源列表 param=', param, '&option=', option);
        // 可以通过传参 _success 来控制返回消息的成功状态。
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            data: {
                total: '@integer(0,10)',
                current_page: 1,
                last_age: '@integer(1,5)',
                'data|1-10': [
                    {
                        // 'id': '@id', // 主键ID
                        'id': '@increment', // 主键ID
                        'pid': '@integer(100,1000)', // 父级ID
                        'text': '@cname', // 规则标题
                        'link': '@cname', // 规则路径
                        'icon': '@image("200x100", "#894FC4", "#FFF", "png", "描述!")', // 图标
                        'extra': '@cname', // 扩展数据
                        'sort': '@integer(100,1000)', // 排序权重
                        'app_flag': '@cname', // 模块标志
                        'status': '@integer(100,1000)', // 状态
                        'children|1-10': [{
                            // 'id': '@id', // 主键ID
                            'id': '@increment', // 主键ID
                            'pid': '@integer(100,1000)', // 父级ID
                            'text': '@cname', // 规则标题
                            'link': '@cname', // 规则路径
                            'icon': '@image("200x100", "#894FC4", "#FFF", "png", "描述!")', // 图标
                            'extra': '@cname', // 扩展数据
                            'sort': '@integer(100,1000)', // 排序权重
                            'app_flag': '@cname', // 模块标志
                            'status': '@integer(100,1000)', // 状态
                        }],
                    }
                ],
            },
        })
    }

    // 显示指定的资源
    read(option) {
        let param = this.parseOption(option);
        console.log('[权限规则模拟数据] 显示指定的资源 param=', param, '&option=', option);
        if (param.id == undefined) {
            return this.stdMessage(false, '参数无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                // 'id': '@id', // 主键ID
                'id': '@increment', // 主键ID
                'pid': '@integer(100,1000)', // 父级ID
                'text': '@cname', // 规则标题
                'link': '@cname', // 规则路径
                'icon': '@image("200x100", "#894FC4", "#FFF", "png", "描述!")', // 图标
                'extra': '@cname', // 扩展数据
                'sort': '@integer(100,1000)', // 排序权重
                'app_flag': '@cname', // 模块标志
                'status': '@integer(100,1000)', // 状态
                'children|1-10': [{
                    // 'id': '@id', // 主键ID
                    'id': '@increment', // 主键ID
                    'pid': '@integer(100,1000)', // 父级ID
                    'text': '@cname', // 规则标题
                    'link': '@cname', // 规则路径
                    'icon': '@image("200x100", "#894FC4", "#FFF", "png", "描述!")', // 图标
                    'extra': '@cname', // 扩展数据
                    'sort': '@integer(100,1000)', // 排序权重
                    'app_flag': '@cname', // 模块标志
                    'status': '@integer(100,1000)', // 状态
                }],
            }
        })
    }

    // 保存新建的资源
    save(option) {
        let param = this.parseOption(option);
        console.log('[权限规则模拟数据] 保存新建的资源 param=', param, '&option=', option);
        if (!param.user_name) {
            return this.stdMessage(false, '用户名是必填项');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': '@id', // 随机编号
            }
        })
    }

    // 保存更新的资源
    update(option) {
        let param = this.parseOption(option);
        console.log('[权限规则模拟数据] 保存更新的资源 param=', param, '&option=', option);
        if (!param.id || isNaN(param.id)) {
            return this.stdMessage(false, '参数无效');
        }
        if (!param.user_name || param.user_name.trim().length == 0) {
            return this.stdMessage(false, '用户名无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': param.id, // 随机编号
            }
        })

    }

    // 删除指定资源
    delete(option) {
        let param = this.parseOption(option);
        console.log('[权限规则模拟数据] 删除指定资源 param=', param, '&option=', option);
        if (param.id == undefined) {
            return this.stdMessage(false, '参数无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': param.id, // 随机编号
            }
        })
    }

    // 解析参数 option= {url:'/api/read?id=1', type:'GET', data:null}
    parseOption(option) {
        let param = {}
        if (option.url.indexOf('?') > -1) {
            new URLSearchParams(option.url.substring(option.url.indexOf('?') + 1)).forEach((v, k) => {
                param[k] = v;
            })
        }
        if (option.body) {
            if (option.body instanceof FormData) {
                option.body.forEach((v, k) => {
                    param[k] = v;
                })
            } else {
                param = JSON.parse(option.body);
            }
        }
        // 可以通过传参 _success 来控制返回消息的成功状态。默认返回成功消息。
        if (typeof (param._success) != 'boolean') {
            param._success = true;
        }
        return param;
    }

    // 返回标准消息对象
    stdMessage(success, message, data = '', code = 0) {
        return {
            success: success,
            message: message,
            data: data,
            code: code,
        }
    }
}
export default new AuthRulesMock;